home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / imploderdecr.lha / downloads / ImploderDecrunch.s
Encoding:
Text File  |  1990-09-13  |  3.5 KB  |  230 lines

  1. ;Imploder Data Decrunch
  2. ;ripped by zero-commander of ALIENGROUP (10-Sep-1992)
  3.  
  4. ;A0=CrunchedDataStart
  5.  
  6. ;This Decrunchroutine decrunch the data to the adress of the Cruncheddata.
  7. ;Test D0 If you want to know that the decrunching was successful!!
  8. ;D0=0 anything is OK
  9.  
  10.  
  11. x:
  12. start:                        ;for Oxygene
  13.     move.l    4,a6
  14.     jsr    -$84(a6)
  15.     lea    $80000,a0
  16. decrunchinit:
  17.     cmp.l    #'IMP!',(a0)            ;Test ImploderData
  18.     bne.s    nodecrunch
  19.     movem.l    d2-d5/a2-a4,-(sp)
  20.     move.l    a0,a3
  21.     move.l    a0,a4
  22.     tst.l    (a0)+
  23.     add.l    (a0)+,a4            ;DecrunchedData end
  24.     add.l    (a0)+,a3            ;CrunchedData end
  25.     move.l    a3,a2
  26.     move.l    (a2)+,-(a0)
  27.     move.l    (a2)+,-(a0)
  28.     move.l    (a2)+,-(a0)
  29.     move.l    (a2)+,d2
  30.     move.w    (a2)+,d3
  31.     bmi.s    decrunchinitw1
  32.     subq.l    #1,a3
  33. decrunchinitw1:
  34.     lea    databuffer(pc),a1
  35.     moveq    #6,d0
  36. decrunchinitloop:
  37.     move.l    (a2)+,(a1)+
  38.     dbra    d0,decrunchinitloop
  39.     lea    databuffer(pc),a1
  40.     bra    decrunch
  41. nodecrunch:
  42.     move.l    4,a6
  43.     jsr    -$8a(a6)        ;Tasks enable (zc)
  44.     moveq    #0,d0
  45.     rts
  46.  
  47.  
  48. decrunch:
  49.     tst.l    d2
  50.     beq.s    decrunchw1
  51. decrunchloop1:
  52.     move.b    -(a3),-(a4)
  53.     subq.l    #1,d2
  54.     bne.s    decrunchloop1
  55. decrunchw1:
  56.     cmp.l    a4,a0
  57.     blo.s    decrunchw2
  58.     moveq    #-1,d0
  59.     cmp.l    a3,a0
  60.     beq.s    notready
  61.     moveq    #0,d0
  62. notready:
  63.     movem.l    (sp)+,d2-d5/a2-a4
  64.     move.l    4,a6
  65.     jsr    -$8a(a6)        ;Tasks enable (zc)
  66.     rts
  67.  
  68. decrunchw2:
  69.     add.b    d3,d3
  70.     bne.s    decrunchw3
  71.     move.b    -(a3),d3
  72.     addx.b    d3,d3
  73. decrunchw3:
  74.     bhs.s    decrunchw15
  75.     add.b    d3,d3
  76.     bne.s    decrunchw4
  77.     move.b    -(a3),d3
  78.     addx.b    d3,d3
  79. decrunchw4:
  80.     bhs.s    decrunchw14
  81.     add.b    d3,d3
  82.     bne.s    decrunchw5
  83.     move.b    -(a3),d3
  84.     addx.b    d3,d3
  85. decrunchw5:
  86.     bhs.s    decrunchw13
  87.     add.b    d3,d3
  88.     bne.s    decrunchw6
  89.     move.b    -(a3),d3
  90.     addx.b    d3,d3
  91. decrunchw6:
  92.     bhs.s    decrunchw12
  93.     moveq    #0,d4
  94.     add.b    d3,d3
  95.     bne.s    decrunchw7
  96.     move.b    -(a3),d3
  97.     addx.b    d3,d3
  98. decrunchw7:
  99.     bhs.s    decrunchw8
  100.     move.b    -(a3),d4
  101.     moveq    #3,d0
  102.     subq.b    #1,d4
  103.     bra.s    decrunchw16
  104.  
  105. decrunchw8:
  106.     add.b    d3,d3
  107.     bne.s    decrunchw9
  108.     move.b    -(a3),d3
  109.     addx.b    d3,d3
  110. decrunchw9:
  111.     addx.b    d4,d4
  112.     add.b    d3,d3
  113.     bne.s    decrunchw10
  114.     move.b    -(a3),d3
  115.     addx.b    d3,d3
  116. decrunchw10:
  117.     addx.b    d4,d4
  118.     add.b    d3,d3
  119.     bne.s    decrunchw11
  120.     move.b    -(a3),d3
  121.     addx.b    d3,d3
  122. decrunchw11:
  123.     addx.b    d4,d4
  124.     addq.b    #5,d4
  125.     moveq    #3,d0
  126.     bra.s    decrunchw16
  127.  
  128. decrunchw12:
  129.     moveq    #4,d4
  130.     moveq    #3,d0
  131.     bra.s    decrunchw16
  132.  
  133. decrunchw13:
  134.     moveq    #3,d4
  135.     moveq    #2,d0
  136.     bra.s    decrunchw16
  137.  
  138. decrunchw14:
  139.     moveq    #2,d4
  140.     moveq    #1,d0
  141.     bra.s    decrunchw16
  142.  
  143. decrunchw15:
  144.     moveq    #1,d4
  145.     moveq    #0,d0
  146. decrunchw16:
  147.     moveq    #0,d5
  148.     move.w    d0,d1
  149.     add.b    d3,d3
  150.     bne.s    decrunchw17
  151.     move.b    -(a3),d3
  152.     addx.b    d3,d3
  153. decrunchw17:
  154.     bhs.s    decrunchw20
  155.     add.b    d3,d3
  156.     bne.s    decrunchw18
  157.     move.b    -(a3),d3
  158.     addx.b    d3,d3
  159. decrunchw18:
  160.     bhs.s    decrunchw19
  161.     move.b    data1(pc,d0.w),d5
  162.     addq.b    #8,d0
  163.     bra.s    decrunchw20
  164.  
  165. decrunchw19:
  166.     moveq    #2,d5
  167.     addq.b    #4,d0
  168. decrunchw20:
  169.     move.b    data2(pc,d0.w),d0
  170. decrunchw21:
  171.     add.b    d3,d3
  172.     bne.s    decrunchw22
  173.     move.b    -(a3),d3
  174.     addx.b    d3,d3
  175. decrunchw22:
  176.     addx.w    d2,d2
  177.     subq.b    #1,d0
  178.     bne.s    decrunchw21
  179.     add.w    d5,d2
  180.     moveq    #0,d5
  181.     move.l    d5,a2
  182.     move.w    d1,d0
  183.     add.b    d3,d3
  184.     bne.s    decrunchw23
  185.     move.b    -(a3),d3
  186.     addx.b    d3,d3
  187. decrunchw23:
  188.     bhs.s    decrunchw26
  189.     add.w    d1,d1
  190.     add.b    d3,d3
  191.     bne.s    decrunchw24
  192.     move.b    -(a3),d3
  193.     addx.b    d3,d3
  194. decrunchw24:
  195.     bhs.s    decrunchw25
  196.     move.w    8(a1,d1.w),a2
  197.     addq.b    #8,d0
  198.     bra.s    decrunchw26
  199.  
  200. decrunchw25:
  201.     move.w    (a1,d1.w),a2
  202.     addq.b    #4,d0
  203. decrunchw26:
  204.     move.b    16(a1,d0.w),d0
  205. decrunchw27:
  206.     add.b    d3,d3
  207.     bne.s    decrunchw28
  208.     move.b    -(a3),d3
  209.     addx.b    d3,d3
  210. decrunchw28:
  211.     addx.l    d5,d5
  212.     subq.b    #1,d0
  213.     bne.s    decrunchw27
  214.     addq.w    #1,a2
  215.     add.l    d5,a2
  216.     add.l    a4,a2
  217. decrunchloop:
  218.     move.b    -(a2),-(a4)
  219.     dbra    d4,decrunchloop
  220.     not.w    $dff180
  221.     bra    decrunch
  222.  
  223. data1:
  224.     dc.b    6,10,10,18
  225. data2:
  226.     dc.b    1,1,1,1,2,3,3,4,4,5,7,14
  227. databuffer:
  228.     dc.l    7
  229.  
  230.